package multimode;

/**
 * 三、简单多状态 dp 问题
 * 2. 打家劫舍 II
 * 2024-10-20
 */
public class demo12 {
    public int rob(int[] nums) {
        int n = nums.length;
        return Math.max(nums[0] + rob1(nums, 2, n-2), rob1(nums,1, n-1));
    }

    public int rob1(int[] nums, int left, int right){
        //处理边界情况，这个房间不存在
        if(left > right) return 0;
        //1. 创建 dp 表
        int n = nums.length;
        int[] f = new int[n];
        int[] g = new int[n];

        //2. 初始化
        f[left] = nums[left];

        //3. 填表
        for (int i = left + 1; i <= right; i++) {
            f[i] = g[i-1] + nums[i];
            g[i] = Math.max(g[i-1], f[i-1]);
        }
        return Math.max(f[right], g[right]);
    }
}
